package ieco.uccimpl;

import ieco.daoimpl.EtudiantDaoImpl;
import ieco.daoimpl.SerieDaoImpl;
import ieco.domaine.Etudiant;
import ieco.domaine.Serie;
import ieco.ucc.GestionDesSeries;

import java.util.Iterator;
import java.util.List;
import java.util.Map;

import javax.ejb.EJB;
import javax.ejb.Stateless;

@Stateless
@SuppressWarnings("serial")
public class GestionDesSeriesImpl implements GestionDesSeries{

	@EJB
	SerieDaoImpl serieDao;
	
	@EJB
	EtudiantDaoImpl etudiantDao;

	@Override
	public boolean enregistrerLesSeries(Map<String, List<Integer>> series) {
		
		Iterator<String> codes = series.keySet().iterator();
		while(codes.hasNext()){
			String code = codes.next();
			Serie serie = serieDao.findSerie(code);
			if (serie == null) {
				serie = new Serie(code);
				serieDao.enregistrer(serie);
			}else{
				serieDao.mettreAJour(serie);
			}
			Iterator<Integer> idsEtudiants = series.get(serie.getCode())
					.iterator();
			while (idsEtudiants.hasNext()) {
				Etudiant etudiant = etudiantDao.findEtudiant(idsEtudiants
						.next());
				etudiant.setSerie(serie);
				etudiantDao.mettreAJour(etudiant);
			}
		}
		
 		Iterator<Serie> iterAllSeries = serieDao.findAllSeries().iterator();
 		while(iterAllSeries.hasNext()){
 			Serie serieCourante = iterAllSeries.next();
 			if(!series.keySet().contains(serieCourante.getCode())){
 				Iterator<Etudiant> etudiantsAVirer = etudiantDao.findAllEtudiantsPourSerie(serieCourante.getId()).iterator();
 				while(etudiantsAVirer.hasNext()){
 					Etudiant etudiant = etudiantsAVirer.next();
 					etudiant.setSerie(null);
 					etudiantDao.mettreAJour(etudiant);
 				}
 				serieDao.deleteSerie(serieCourante.getId());
 			}
 		}
		
		return true;
	}
	
}
